package Day16.final_;

/**
 * @author HYHwtx
 * @version 1.0
 * @date 2022/2/23 10:41
 */

/*
*
* final使用的注意事项：
* 1.final修饰的属性又叫常量，一般使用XX_XX_XX来命名
* 2.final修饰的属性在定义的时候必须赋初值，且以后不能被修改
* 赋值可以在如下位置之一（选择一个位置赋初始值就可以）
*       1.定义的时候。比如public final double TAX_RATE = 0.88;
*       2.在构造器中
*       3.在代码块中
* 3.如果final修饰的属性是静态的，则初始化的位置只能是：
*       1.定义时
*       2.在静态代码块中，不能再构造器中赋值
* 4.final不能被继承，但是可以实例化对象
* 5.如果类不是final类，但是含有final方法，则该方法显然不能重写，但是可以继承
*
* */
public class Final02 {
    public static void main(String[] args) {

    }
}
class AA{
    /*1.定义的时候。比如public final double TAX_RATE = 0.88;
     *       2.在构造器中
     *       3.在代码块中
     * */
    public final double TAX_RATE = 0.08;//定义的时候赋值
    public  final double TAX_RATE2;
    public  final double TAX_RATE3 ;

    public AA(){//在构造器中赋值
        TAX_RATE2 = 1.1;
    }

    //代码块中
    {
        TAX_RATE3 = 6.8;
    }

}
class BB{
    /*3.如果final修饰的属性是静态的，则初始化的位置只能是：
     *       1.定义时
     *       2.在静态代码块中，不能再构造器中赋值*/

    public static final double TAX_RATE = 99.9;
    public static final double TAX_RATE2;

   static {
       TAX_RATE2 = 2.3;
   }
}

// 4.final不能被继承，但是可以实例化对象
class CC{

}
//5.如果类不是final类，但是含有final方法，则该方法显然不能重写，但是可以继承,前提是遵守继承的机制
class DD{
    public final void cal(){
//        System.out.println("cal方法"+);
    }
}
class EE extends DD{
//    public final void cal(){
//        System.out.println("你没有重写》");
//    }
}